Do better fallbacks if the icon theme does not have icons. (#345666,
authorMatthias Clasen <mclasen@redhat.com>
Tue, 15 Aug 2006 17:28:34 +0000 (17:28 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Tue, 15 Aug 2006 17:28:34 +0000 (17:28 +0000)
2006-08-15  Matthias Clasen  <mclasen@redhat.com>

* gtk/gtkfilesystem.c (gtk_file_info_render_icon)
(gtk_file_system_volume_render_icon): Do better fallbacks
if the icon theme does not have icons.  (#345666,
Kazuki Iwamoto)

ChangeLog
ChangeLog.pre-2-10
gtk/gtkfilesystem.c

index 0650dc6ff88437bd8349f6f048a74693f04e0ab3..4288501d245a27a2572c0e5f19bc6e731547e565 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2006-08-15  Matthias Clasen  <mclasen@redhat.com>
 
+       * gtk/gtkfilesystem.c (gtk_file_info_render_icon) 
+       (gtk_file_system_volume_render_icon): Do better fallbacks
+       if the icon theme does not have icons.  (#345666,
+       Kazuki Iwamoto)
+
        * gtk/gtkruler.c (gtk_ruler_unrealize): Don't leak
        no_gr_exp_gc.  (#350050, Chris Wilson)
 
index 0650dc6ff88437bd8349f6f048a74693f04e0ab3..4288501d245a27a2572c0e5f19bc6e731547e565 100644 (file)
@@ -1,5 +1,10 @@
 2006-08-15  Matthias Clasen  <mclasen@redhat.com>
 
+       * gtk/gtkfilesystem.c (gtk_file_info_render_icon) 
+       (gtk_file_system_volume_render_icon): Do better fallbacks
+       if the icon theme does not have icons.  (#345666,
+       Kazuki Iwamoto)
+
        * gtk/gtkruler.c (gtk_ruler_unrealize): Don't leak
        no_gr_exp_gc.  (#350050, Chris Wilson)
 
index c7f965e23fd774fd1f531217bb1a10b1819a7cbc..493960239d2a941493751c43084de51a71d9417c 100644 (file)
@@ -301,15 +301,20 @@ gtk_file_info_render_icon (const GtkFileInfo  *info,
           GtkIconTheme *icon_theme;
 
          icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
-         pixbuf = gtk_icon_theme_load_icon (icon_theme, info->icon_name,
-                                            pixel_size, 0, NULL);
+          if (gtk_icon_theme_has_icon (icon_theme, info->icon_name))
+            pixbuf = gtk_icon_theme_load_icon (icon_theme, info->icon_name,
+                                               pixel_size, 0, NULL);
        }
     }
 
   if (!pixbuf)
     {
       /* load a fallback icon */
-      pixbuf = gtk_widget_render_icon (widget, GTK_STOCK_FILE, GTK_ICON_SIZE_SMALL_TOOLBAR, NULL);
+      pixbuf = gtk_widget_render_icon (widget,
+                                       gtk_file_info_get_is_folder (info)
+                                        ? GTK_STOCK_DIRECTORY : GTK_STOCK_FILE,
+                                       GTK_ICON_SIZE_SMALL_TOOLBAR,
+                                       NULL);
       if (!pixbuf && error)
         g_set_error (error,
                     GTK_FILE_SYSTEM_ERROR,
@@ -648,7 +653,7 @@ gtk_file_system_volume_render_icon (GtkFileSystem        *file_system,
                                    GError              **error)
 {
   gchar *icon_name;
-  GdkPixbuf *pixbuf;
+  GdkPixbuf *pixbuf = NULL;
 
   g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), NULL);
   g_return_val_if_fail (volume != NULL, NULL);
@@ -658,14 +663,22 @@ gtk_file_system_volume_render_icon (GtkFileSystem        *file_system,
 
   icon_name = gtk_file_system_volume_get_icon_name (file_system, volume,
                                                    error);
-  if (!icon_name)
+  if (icon_name)
     {
-      return NULL;
+      GtkIconTheme *icon_theme;
+
+      icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
+      if (gtk_icon_theme_has_icon (icon_theme, icon_name))
+        pixbuf = gtk_icon_theme_load_icon (icon_theme,
+                                           icon_name, pixel_size, 0, NULL);
+      g_free (icon_name);
     }
 
-  pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget)),
-                                    icon_name, pixel_size, 0, NULL);
-  g_free (icon_name);
+  if (!pixbuf)
+    pixbuf = gtk_widget_render_icon (widget,
+                                     GTK_STOCK_HARDDISK,
+                                     GTK_ICON_SIZE_SMALL_TOOLBAR,
+                                     NULL);
 
   return pixbuf;
 }